package com.gsbelarus.gedemin.income.fragment;

import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;

import com.gsbelarus.gedemin.income.adapter.ClientsListAdapter;
import com.gsbelarus.gedemin.income.table.ClientsTable;
import com.gsbelarus.gedemin.income.R;
import com.gsbelarus.gedemin.income.adapter.ClientsListSimpleAdapter;
import com.gsbelarus.gedemin.income.sync.DataBaseHelper;
import com.gsbelarus.gedemin.lib.ui.fragment.ListFragmentModel;

import java.util.List;

/**
 * Движение по клиенту за месяц
 * (Меню - Поступления - Клиент - Движение,
 * Меню - Клиенты - Клиент - Движение,
 * Меню - Календарь - Месяц - Поступления - Клиент - Движение)
 * В верхней части выводится наименование клиента. Показываются фактическая и
 * плановая суммы за месяц, процент.
 * Ниже выводятся все оплаты клиента в хронологическом порядке за указанный месяц.
 * Таблица имеет две колонки: Дата, Сумма оплаты.
 */
public class ClientMonthFrgm extends ListFragmentModel {

    /**
     * данные, полученные из БД, для вывода в list:
     * ClientsTable.id - id клиента
     * ClientsTable.name - дата
     * ClientsTable.paidSum - оплаченная сумма на дату
     */
    private List<ClientsTable> contacts;

    private ClientsTable objIncome;

    /**
     * Если нужно переопределяется в классе наследнике, возвращает id View заголовка
     */
    @Override
    public Integer getHeaderId() {
        return R.layout.header_list_sums;
    }

    /**
     * Вызывается при создании View или при смене ориентации экрана.
     * Может быть переопределен в классе наследнике
     *
     * @param rootView корневое View
     */
    @Override
    public void onCreateViewFragment(View rootView) {
        super.onCreateViewFragment(rootView);
        TextView itemView = (TextView) rootView.findViewById(R.id.client_list_item_name);
        objIncome = new ClientsTable(argumentsHelper.selectedMonth, 0, 0);
        objIncome.convertMonthYear(context, argumentsHelper.selectedYear);
        itemView.setText(objIncome.getName());
    }

    @Override
    public void onListItemClick(AdapterView<?> adapterView, View view, int position, long id) {

    }

    /**
     * Чтение данных из БД в новом потоке
     */
    @Override
    public void readDataBase() {
        DataBaseHelper dbh = DataBaseHelper.getInstance(context);
        contacts = dbh.getClientItemMonthList(argumentsHelper.id, argumentsHelper.selectedMonth, argumentsHelper.selectedYear);
        objIncome = dbh.getClientItemMonthListSum(argumentsHelper.id, argumentsHelper.selectedMonth, argumentsHelper.selectedYear);
    }

    /**
     * Метод вызывается после чтения данных из БД или при смене ориентации экрана.
     * Может быть вызван до окончания выполнения потока для запроса данных из БД, поэтому следует проверять данные на null.
     * Служит для инициализации View данными
     *
     * @param rootView корневое View
     */
    @Override
    public void initView(View rootView) {
        if (contacts == null || objIncome == null)
            return;
        ClientsListAdapter adapter = new ClientsListAdapter(context, contacts);
        list.setAdapter(adapter);

        /**
         * Статический компонент на форме под заголовком.
         * Обновляется после чтения данных из БД.
         * Выводится: номер  месяц, год,
         * оплаченная сумма по клиенту за месяц,
         * плановая сумма по клиенту за месяц
         * Если плановая сумма 0, выводится только дата и оплаченная сумма
         */
        ClientsListSimpleAdapter headerAdapter = new ClientsListSimpleAdapter(context);
        headerAdapter.changeVisibilityPaidText(rootView, View.VISIBLE);
        if (objIncome.getPlanSum() > 0) {
            headerAdapter.changeVisibilityPlanText(rootView, View.VISIBLE);
            headerAdapter.changeVisibilityPercent(rootView, View.VISIBLE);

            if (headerAdapter.isFuturePeriod(objIncome))
                headerAdapter.changeVisibilityPlanImage(rootView, View.INVISIBLE);
            else
                headerAdapter.changeVisibilityPlanImage(rootView, View.VISIBLE);
        }
        headerAdapter.adaptView(rootView, objIncome);
    }
}
